#include <stdio.h>
#include <pthread.h>

/*
 * 将线程状态设为分离。运行结束后会自动释放所有资源
 */

/*

	线程与分离与结合：

	在任何一个时间点上，线程是可结合的（joinable）或者是分离的（detached）。一个可结合的线程能够被其他线程收回其资源和杀死。
	在被其他线程回收之前，它的存储器资源（例如栈）是不释放的。相反，一个分离的线程是不能被其他线程回收或杀死的，
	它的存储器资源在它终止时由系统自动释放。

	创建出的线程默认属性为可结合，所以必须等待它否则会产生类似僵尸进程的情况。

	若线程为可分离则不需要join，线程运行结束后会自动释放所有资源。

*/

void * run(void * arg)
{
    pthread_detach( pthread_self());
    printf("I will detach .. \n");
    return NULL;
}

int main()
{
    pthread_t tid1;
    pthread_create(&tid1, NULL, run, NULL);

    sleep(1); // 因为主线程不会挂起等待，为了保证子线程先执行完分离，让主线程先等待1s
    int ret = 0;
    ret =  pthread_join(tid1, NULL);
    if( ret == 0)
    {
        printf(" join sucess. \n");
    }
    else
    {
        printf(" join failed. \n");
    }
    return 0;
}

